package model.i;

import model.Player;

/**
 *
 * @author christopher, modified by Mruzuki
 * This is the IRules interface. It serves to define what core functions Model should
 * be able to call in order to determine what should happen when a given even takes place.
 */

public interface IRules {

    public void resolveBattle(boolean win);

    /**
     * What happens when a player is selected?
     */
    public void playerSelected(Player player);

    /**
     * What happens after the die is rolled?
     */
    public void dieRolled(Integer dieResult);

    /**
     * What happens when a piece is moved?
     */
    public void movePiece(int from, int moves);

    /**
     * What should be done to finalize before the next players turn?
     */
    public void cleanUp();

    /**
     * Set and Check methods related to the state variable pushAllowed in Rules.
     * This state variables determines whether or not it is permissible to push other
     * players pieces back to the starting area during the game.
     */
    public void setPushAllowed(boolean b);
    public boolean isPushAllowedOn();

    /**
     * Set and Check methods related to the state variable enterGoalEasy in Rules. This variable
     * determines whether or not players have the ability to easily enter the nest, meaning, do
     * they have to land exactly on the nest to get the piece safely home, or is it enough that they
     * roll high enough to at least land on it, even if they would in reality "move beyond" it?
     */
    public void setEnterGoalEasy(boolean b);
    public boolean isEnterGoalEasyOn();

    public void onTimeOut();
}
